package game;

public class Bolo {
	private int xDefecto;
	private int yDefecto;
	private int x;
	private int y;
	private int estado;
	private int dx;
	private int dy;
	private int dr;
	private boolean pendienteDeApuntar;
	

	public int getEstado() {
		return estado;
	}

	public boolean isPendienteDeApuntar() {
		return pendienteDeApuntar;
	}

	public int getX() {
		return x;
	}

	public int getY() {
		return y;
	}

	public Bolo(int defectoX, int defectoY) {
		super();
		xDefecto = defectoX;
		yDefecto = defectoY;
	}

	public void levantaBolo() {
		x = xDefecto;
		y = yDefecto;
		estado = -1;
		dx = 0;
		dy = 0;
		pendienteDeApuntar = false;
	}

	public void quitarBolo() {
		if (estaTumbado())
			estado = -2;
		pendienteDeApuntar = false;
	}

	public void moverBolo() {
		if (estaTumbado()) {
			x += dx;
			y += dy;
			estado += dr;
			if (x > 100)
				x = 100;
			if (x < -100)
				x = -100;
			if (y > -100) {
				if (estado >= 16)
					estado -= 16;
				if (estado < 0)
					estado += 16;
				if (dx > 0)
					dx--;
				if (dy > 0)
					dy--;
				if (dr > 0)
					dr--;
			} else
				estado = -2; // Desaparace el bolo
		}
	}

	public void comprobarColision(int nX, int nY, int velocidad,int estadoS,int dxS,int drS) {
		if (estado == -1) {
			int nHipo = (int) (Math.sqrt(Math.pow(x - nX, 2)
					+ Math.pow(y - nY, 2)));
			if (nHipo < 30) {
				estado = estadoS;
				if (x - nX != 0) {
					// Angulo de pegada
					double angulo = Math.atan((1.0 * (y - nY) / (x - nX)));
					dx = (int) (Math.cos(angulo) * velocidad);
					dy = (int) (Math.sin(angulo) * velocidad);
				} else {
					dy = -velocidad;
					dx = 0;
				}
				dx += dxS;
				dr = drS;	
				dr *= velocidad;
				if (dr > 15)
					dr = 15;
				if (dr < -15)
					dr = -15;
				pendienteDeApuntar = true;
			}
		}
	}

	public boolean estaTumbado() {
		return estado >= 0;
	}

	public int getVelocidad() {
		return (int) (Math.sqrt(dx * dx - dy * dy));
	}
}